package org.ccay.manage.enumerable.service;

import java.util.List;
import java.util.Map;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import org.ccay.core.base.BatchVO;
import org.ccay.core.base.KeyValuePairVO;
import org.ccay.core.base.PageVO;
import org.ccay.core.base.PagedResult;
import org.ccay.manage.enumerable.vo.EnumItemVO;
import org.ccay.security.annotation.SecurityBindingURL;
import org.ccay.security.annotation.SecurityOperation;
import org.ccay.security.annotation.SecurityResource;

/**
 * 可枚举想扩展信息管理服务接口
 * 本接口提供运行时添加、删除及查找注册项的方法，以支持非停机更新注册项
 * @author chaowangbang
 * @since 2017年6月13
 *
 */
@Path("/")
@Produces("application/json")
@SecurityResource(code="enumManagement",name="系统管理|枚举项管理",desc="")
public interface IDBEnumManageService {

	@SecurityOperation(code="page",name="页面权限")
	@SecurityBindingURL("/manage/enumerable/enumManage.html")
	String ENUM_MANAGEMENT = "ENUM_MANAGEMENT";
	
	
	@SecurityOperation(code="reload",name="重新加载")
	String ENUM_MANAGEMENT_RELOAD = "ENUM_MANAGEMENT_RELOAD";
	
	/**
	 * 获取枚举项列表
	 * @param role
	 * @param page
	 * @return
	 */
	@GET
	@Path("/findPagedEnums/{pageSize}/{curPage}")
	@SecurityOperation(code="query",name="查询枚举项")
	PagedResult<EnumItemVO> findPagedEnums(@QueryParam("")EnumItemVO enumItem,@PathParam("")PageVO page);

	/**
	 * 修改
	 * @param items2Update
	 * @return
	 */
	@PUT
	@Path("/updateEnumItems")
	@SecurityOperation(code="update",name="修改枚举项")
	int updateEnumItems(List<EnumItemVO> items2Update);

	/**
	 * 创建
	 * @param items2Create
	 * @return
	 */
	@POST
	@Path("/createEnumItems")
	@SecurityOperation(code="create",name="创建枚举项")
	int createEnumItems(List<EnumItemVO> items2Create);

	/**
	 * 删除
	 * @param items2Delete
	 * @return
	 */
	@DELETE
	@Path("/deleteEnumItems")
	@SecurityOperation(code="delete",name="删除枚举项")
	int deleteEnumItems(List<EnumItemVO> items2Delete);

	/**
	 * 批量操作
	 * @param batchItems
	 */
	@PUT
	@Path("/batch")
	void batchOperation(BatchVO<EnumItemVO> batchItems);

	/**
	 * 
	 * @param batchItems
	 * @return
	 */
	@PUT
	@Path("/validateForBatch")
	Map<String, Object> validateForBatch(BatchVO<EnumItemVO> batchItems);
	
	
	/**
	 * 获取系统中的所有枚举类型
	 * @return 
	 */
	@GET
	@Path("/findAllEnumType")
	List<KeyValuePairVO> findAllEnumType();
	
	
	/**
	 * 获取系统中的所有枚举类型
	 * @return 
	 */
	@GET
	@Path("/reload")
	void reloadAll();
	
}
